package modeloCarro;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;

import javax.persistence.*;

import modeloDetalleCarro.DetalleCarro;
import modeloUsuario.Usuario;

/**
 * Clase Carro que se comporta como entidad con todos los atributos 
 * de la tabla carro.
 *
 * @author Ronald Carroza Riquelme.
 */
@Entity
@Table(name = "carro")
public class Carro implements Serializable {
    
    /**
     * Atributo necesario al ser Serializable.
     */
    private static final long serialVersionUID = 1L;

    /**
     * Atributo clave de la tabla.
     */
    @Id
    @Column(name = "ID_CARRO")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int idCarro;

    /**
     * Atributo necesario para hacer join con la tabla usuario.
     */
    @ManyToOne
    @JoinColumn(name = "NOMBRE_USUARIO")
    private Usuario nomUsu;

    /**
     * Atributo relacionado a la columna COMPRA_FINALIZADA.
     */
    @Column(name = "COMPRA_FINALIZADA")
    private int estadoCompra;

    /**
     * Atributo que guarda la fecha de la compra que es la del sistema.
     */
    @Column(name = "FECHA_COMPRA")
    private Date fechaCompra;

    /**
     * Atributo para ubtener y guardar el detalle de cada carrito, mapeado
     * por la variable carro en la clase DetalleCarro.
     */
    @OneToMany(mappedBy = "carro", cascade = CascadeType.ALL)
    private ArrayList<DetalleCarro> detalle;

    /**
     * Permite obtener el valor del atributo idCarro.
     * @return el valor del atributo idCarro.
     */
    public int getIdCarro() {
        return idCarro;
    }

    /**
     * Permite cambiar el valor del atributo idCarro.
     *
     * @param idCarro nuevo valor para el atributo idCarro.
     */
    public void setIdCarro(int idCarro) {
        this.idCarro = idCarro;
    }

    /**
     * Permite obtener el valor del atributo nomUsu.
     * @return el valor del atributo nomUsu.
     */
    public Usuario getNomUsu() {
        return nomUsu;
    }

    /**
     * Permite cambiar el valor del atributo nomUsu.
     *
     * @param nomUsu nuevo valor para el atributo nomUsu.
     */
    public void setNomUsu(Usuario nomUsu) {
        this.nomUsu = nomUsu;
    }

    /**
     * Permite obtener el valor del atributo estadoCompra.
     * @return el valor del atributo estadoCompra.
     */
    public int getEstadoCompra() {
        return estadoCompra;
    }

    /**
     * Permite cambiar el valor del atributo estadoCompra.
     *
     * @param estadoCompra nuevo valor para el atributo estadoCompra.
     */
    public void setEstadoCompra(int estadoCompra) {
        this.estadoCompra = estadoCompra;
    }

    /**
     * Permite obtener el valor del atributo fechaCompra.
     * @return el valor del atributo fechaCompra.
     */
    public Date getFechaCompra() {
        return fechaCompra;
    }

    /**
     * Permite cambiar el valor del atributo fechaCompra.
     *
     * @param fechaCompra nuevo valor para el atributo fechaCompra.
     */
    public void setFechaCompra(Date fechaCompra) {
        this.fechaCompra = fechaCompra;
    }

    /**
     * Permite obtener el valor del atributo detalle.
     * @return el valor del atributo detalle.
     */
    public ArrayList<DetalleCarro> getDetalle() {
        return detalle;
    }

    /**
     * Permite cambiar el valor del atributo detalle.
     *
     * @param detalle nuevo valor para el atributo detalle.
     */
    /**
     * TODO doc information expected for setDetalle method.
     *
     * @param detalle
     */
    public void setDetalle(ArrayList<DetalleCarro> detalle) {
        this.detalle = detalle;
    }
}
